﻿Imports WSEntidades
Imports System.Xml
Imports System.Text.RegularExpressions

Public Class Masfactura

#Region "Metodos_Validacion"
    Public Function isValid_Encabezado(ByRef Resp As List(Of RespuestaPremium), _
                                       ByVal AddMasFactura As MasFactur.AddMasFactura.DocumentoFacturaMasFactura, _
                                       ByVal NombreAdd As String) As Boolean
        Dim msgError As String = ""
        Try
            'DATOS GENERALES
            If (AddMasFactura.Versio = "") Then
                msgError &= "Indique la Versión." & vbCrLf
            ElseIf (AddMasFactura.Versio <> "1.0") Then
                msgError &= "La Versión es incorrecta, debe ser 1.0." & vbCrLf
            End If

            If (NombreAdd = "CH" Or NombreAdd = "WM") Then
                If (AddMasFactura.Tradpp = "") Then
                    msgError &= "Indique el Id Proveedor." & vbCrLf
                Else
                    If (AddMasFactura.Tradpp <> "MASTEDI") Then
                        msgError &= "El Id Proveedor debe ser MASTEDI." & vbCrLf
                    End If
                End If
                'ElseIf (AddMasFactura.Tradpp.Length > 13) Then
                '    msgError &= "El Id Proveedor debe ser de longitud maxima 13." & vbCrLf
            End If

            If (AddMasFactura.Ctppro = "") Then
                msgError &= "Indique el Calif. Proveedor." & vbCrLf
            ElseIf (AddMasFactura.Ctppro.Length > 2) Then
                msgError &= "El Calif Proveedor debe ser de longitud maxima 2." & vbCrLf
            ElseIf (AddMasFactura.Ctppro <> "ZZ") Then
                msgError &= "El Calif Proveedor debe ser ZZ." & vbCrLf
            End If

            If (AddMasFactura.Numfol = "") Then
                msgError &= "Indique el Folio" & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Numfol)) Then
                msgError &= "El Folio debe ser numérico." & vbCrLf
            End If

            If (AddMasFactura.Fecexp = "") Then
                msgError &= "Indique la Fecha de Expedición." & vbCrLf
            Else
                Try
                    Convert.ToDateTime(AddMasFactura.Fecexp)
                Catch ex As Exception
                    msgError &= "La Fecha de Expedición no tiene un formato correcto." & vbCrLf
                End Try
            End If

            If (AddMasFactura.Noapro = "") Then
                msgError &= "Indique el No. Aprob." & vbCrLf
            Else
                If Not (IsNumeric(AddMasFactura.Noapro)) Then
                    msgError &= "El No. Aprob. debe ser numérico." & vbCrLf
                End If
            End If

            If (AddMasFactura.Forpag = "") Then
                msgError &= "Indique la Forma de Pago." & vbCrLf
            End If

            If (AddMasFactura.Tipdoc <> "") Then
                If (AddMasFactura.Tipdoc.Length <> 1) Then
                    msgError &= "El Tipo de Documento debe ser de longitud 1." & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Tipdoc)) Then
                    msgError &= "El Tipo de Documento debe ser numérico." & vbCrLf
                ElseIf (Convert.ToInt32(AddMasFactura.Tipdoc) < 1 Or Convert.ToInt32(AddMasFactura.Tipdoc) > 7) Then
                    msgError &= "No se encuentra el Tipo de Documento." & vbCrLf
                End If
            End If

            If (AddMasFactura.Fundoc <> "") Then
                If (AddMasFactura.Fundoc.Length <> 1) Then
                    msgError &= "La Función del Documento debe ser de longitud 1." & vbCrLf
                ElseIf (AddMasFactura.Fundoc <> "O" And AddMasFactura.Fundoc <> "C") Then
                    msgError &= "La Función del Documento solo puede ser: C u O." & vbCrLf
                End If
            End If

            If (NombreAdd = "CH" Or NombreAdd = "WM") Then
                If (AddMasFactura.Tipmon = "") Then
                    msgError &= "Indique la Moneda." & vbCrLf
                ElseIf (AddMasFactura.Tipmon.Length > 3) Then
                    msgError &= "La Moneda debe ser de longitud maxima 3." & vbCrLf
                End If
            End If

            If (AddMasFactura.Tipcam <> "") Then
                'If (AddMasFactura.Tipmon = "MXN") Then
                '    msgError &= "El Tipo de Cambio no aplica cuando son pesos." & vbCrLf
                'Else
                If Not (IsNumeric(AddMasFactura.Tipcam)) Then
                    msgError &= "El Tipo de Cambio debe ser numérico." & vbCrLf
                End If
                'End If
            End If

            If (AddMasFactura.Diapag = "") Then
                msgError &= "Indique los Dias de Pago." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Diapag)) Then
                msgError &= "Los Dias de Pago debe ser numérico." & vbCrLf
            ElseIf (AddMasFactura.Diapag.Length > 2) Then
                msgError &= "Los Dias de Pago debe de ser de longitud maxima 2." & vbCrLf
            End If
            If (NombreAdd = "CH") Then
                If (AddMasFactura.Pdppag = "") Then
                    msgError &= "Indique el % Desc. por pronto pago." & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Pdppag)) Then
                    msgError &= "El % Desc. por pronto pago debe ser numérico." & vbCrLf
                ElseIf (AddMasFactura.Pdppag.Length > 7) Then
                    msgError &= "El % Desc. por pronto pago debe ser de longitud maxima 7." & vbCrLf
                End If

                If (AddMasFactura.Mdppag = "") Then
                    msgError &= "Indique el Monto Desc. por pronto pago." & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Mdppag)) Then
                    msgError &= "El Monto Desc. por pronto pago debe ser numérico." & vbCrLf
                End If
            End If

            If (AddMasFactura.Numeoc = "") Then
                msgError &= "Indique la Orden de Compra." & vbCrLf
                If (NombreAdd = "CH") Then
                    If (AddMasFactura.Numeoc.Length > 10) Then
                        msgError &= "La Orden de Compra debe ser de longitud maxima 10." & vbCrLf
                    End If
                Else
                    If (AddMasFactura.Numeoc.Length > 6) Then
                        msgError &= "La Orden de Compra debe ser de longitud maxima 6." & vbCrLf
                    End If
                End If
            End If

            If (AddMasFactura.Fechoc = "") Then
                msgError &= "Indique la Fecha de Orden de Compra." & vbCrLf
            ElseIf (AddMasFactura.Fechoc.Length <> 10) Then
                msgError &= "La Fecha de Orden de Compra debe ser de longitud 10." & vbCrLf
            Else
                Try
                    Convert.ToDateTime(AddMasFactura.Fechoc)
                Catch ex As Exception
                    msgError &= "La Fecha de Orden de Compra tiene un formato incorrecto." & vbCrLf
                End Try
            End If

            If (NombreAdd = "CH") Then
                If (AddMasFactura.Notas1 = "") Then
                    msgError &= "Indique las Notas 1." & vbCrLf
                ElseIf (AddMasFactura.Notas1.Length > 255) Then
                    msgError &= "Notas 1 debe ser de longitud maxima 255." & vbCrLf
                End If
                If (AddMasFactura.Notas2 = "") Then
                    msgError &= "Indique las Notas 2." & vbCrLf
                ElseIf (AddMasFactura.Notas2.Length > 255) Then
                    msgError &= "Notas 2 debe ser de longitud maxima 255." & vbCrLf
                End If
            End If

            If (NombreAdd = "CH" Or NombreAdd = "WM") Then
                If (AddMasFactura.Notas3 = "") Then
                    msgError &= "Indique las Notas 3." & vbCrLf
                ElseIf (AddMasFactura.Notas3.Length > 255) Then
                    msgError &= "Notas 3 debe ser de longitud maxima 255." & vbCrLf
                End If
            End If

            If (AddMasFactura.Numdpt <> "") Then
                If Not (IsNumeric(AddMasFactura.Numdpt)) Then
                    msgError &= "El No. de Departamento debe ser numérico." & vbCrLf
                ElseIf (AddMasFactura.Numdpt.Length > 17) Then
                    msgError &= "El No. de Departamento debe ser de longitud maxima 17." & vbCrLf
                End If
            End If

            If (AddMasFactura.Nomdpt <> "") Then
                If (AddMasFactura.Nomdpt.Length > 35) Then
                    msgError &= "El Nombre del Departamento debe ser de longitud maxima 35." & vbCrLf
                End If
            End If

            If (AddMasFactura.Feccon <> "") Then
                If (AddMasFactura.Feccon.Length <> 10) Then
                    msgError &= "La Fecha de Recibo debe ser de longitud 10." & vbCrLf
                Else
                    Try
                        Convert.ToDateTime(AddMasFactura.Feccon)
                    Catch ex As Exception
                        msgError &= "La Fecha de Recibo tiene un formato incorrecto." & vbCrLf
                    End Try
                End If
            End If

            If (AddMasFactura.Tda_contra <> "") Then
                If Not (IsNumeric(AddMasFactura.Tda_contra)) Then
                    msgError &= "El Folio de Entrada debe ser numérico." & vbCrLf
                End If
            End If


            If (msgError = "") Then
                isValid_Encabezado = True
            Else
                isValid_Encabezado = False
                ValidaCFDi.AgregaRespuesta("07", 0, msgError, Resp)
            End If
        Catch ex As Exception
            isValid_Encabezado = False
            ValidaCFDi.AgregaRespuesta("07", 0, ex.Message, Resp)
        End Try
    End Function

    Public Function isValid_Emisor(ByRef Resp As List(Of RespuestaPremium), _
                                   ByVal AddMasFactura As MasFactur.AddMasFactura.DocumentoFacturaMasFactura, _
                                   ByVal NombreAdd As String) As Boolean
        Dim msgError As String = ""
        Try
            'EMISOR
            If (AddMasFactura.Rfcemi = "") Then
                msgError &= "Indique el Rfc del Emisor." & vbCrLf
            ElseIf (AddMasFactura.Rfcemi.Length < 12 Or AddMasFactura.Rfcemi.Length > 13) Then
                msgError &= "El Rfc del Emisor debe ser de longitud minima 12 y maxima 13." & vbCrLf
            ElseIf Not (valida_RFC(AddMasFactura.Rfcemi)) Then
                msgError &= "El Rfc del Emisor tiene una estructura incorrecta." & vbCrLf
            End If

            If (AddMasFactura.Nomemi = "") Then
                msgError &= "Indique el Nombre del Emisor." & vbCrLf
            End If

            If (NombreAdd = "CH" Or NombreAdd = "WM") Then
                If (AddMasFactura.Eanemi = "") Then
                    msgError &= "Indique el EAN del Emisor." & vbCrLf
                ElseIf (AddMasFactura.Eanemi.Length < 12 Or AddMasFactura.Eanemi.Length > 13) Then
                    msgError &= "El EAN del Emisor debe ser de longitud minima 12 y maxima 13." & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Eanemi)) Then
                    msgError &= "El EAN del Emisor debe ser numérico." & vbCrLf
                End If
            Else
                If (AddMasFactura.Eanemi <> "") Then
                    If (AddMasFactura.Eanemi.Length < 12 Or AddMasFactura.Eanemi.Length > 13) Then
                        msgError &= "El EAN del Emisor debe ser de longitud minima 12 y maxima 13." & vbCrLf
                    ElseIf Not (IsNumeric(AddMasFactura.Eanemi)) Then
                        msgError &= "El EAN del Emisor debe ser numérico." & vbCrLf
                    End If
                End If
            End If

            If (AddMasFactura.Numemi = "") Then
                msgError &= "Indique el Numero del Emisor." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Numemi)) Then
                msgError &= "El Numero del Emisor debe ser numérico." & vbCrLf
            End If

            If (NombreAdd = "WM") Then
                If (AddMasFactura.Numemi.Length <> 9) Then
                    msgError &= "El Numero del Emisor debe ser de longitud 9." & vbCrLf
                End If
            Else
                If (AddMasFactura.Numemi.Length > 9) Then
                    msgError &= "El Numero del Emisor debe ser de longitud maxima 9." & vbCrLf
                End If
            End If

            If (AddMasFactura.Calemi = "") Then
                msgError &= "Indique la Calle del Emisor." & vbCrLf
            End If

            If (AddMasFactura.Munemi = "") Then
                msgError &= "Indique el Municipio del Emisor." & vbCrLf
            End If

            If (AddMasFactura.Paiemi = "") Then
                msgError &= "Indique el Pais del Emisor." & vbCrLf
            End If

            If (AddMasFactura.Codemi <> "") Then
                If (AddMasFactura.Codemi.Length <> 5) Then
                    msgError &= "El Codigo Postal del Emisor debe ser de longitud 5." & vbCrLf
                End If
            End If

            If (AddMasFactura.Mailemi <> "") Then
                If Not (valida_Correo(AddMasFactura.Mailemi)) Then
                    msgError &= "El E-Mail del Emisor tiene una estructura incorrecta." & vbCrLf
                End If
            End If

            If (AddMasFactura.Ri_emi <> "") Then
                If Not (IsNumeric(AddMasFactura.Ri_emi)) Then
                    msgError &= "El RI Emisor debe ser numérico." & vbCrLf
                End If
            End If

            'LUGAR EXPEDICION
            If (AddMasFactura.Calexp = "") Then
                msgError &= "Indique la Calle de Expedición." & vbCrLf
            End If

            If (AddMasFactura.Paiexp = "") Then
                msgError &= "Indique el Pais de Expedición." & vbCrLf
            End If

            If (AddMasFactura.Codexp <> "") Then
                If (AddMasFactura.Codexp.Length <> 5) Then
                    msgError &= "El Codigo Postal de Expedición debe ser de longitud 5." & vbCrLf
                End If
            End If

            If (AddMasFactura.Eanexp <> "") Then
                If Not (IsNumeric(AddMasFactura.Eanexp)) Then
                    msgError &= "El EAN de Expedición debe ser numérico." & vbCrLf
                End If
            End If

            If (msgError = "") Then
                isValid_Emisor = True
            Else
                isValid_Emisor = False
                ValidaCFDi.AgregaRespuesta("07", 0, msgError, Resp)
            End If
        Catch ex As Exception
            isValid_Emisor = False
            ValidaCFDi.AgregaRespuesta("07", 0, ex.Message, Resp)
        End Try
    End Function

    Public Function isValid_Receptor(ByRef Resp As List(Of RespuestaPremium), _
                                     ByVal AddMasFactura As MasFactur.AddMasFactura.DocumentoFacturaMasFactura, _
                                     ByVal NombreAdd As String) As Boolean
        Dim msgError As String = ""
        Try
            'RECEPTOR
            If (AddMasFactura.Rfcrec = "") Then
                msgError &= "Indique el Rfc del Receptor." & vbCrLf
            ElseIf (AddMasFactura.Rfcrec.Length < 12 Or AddMasFactura.Rfcrec.Length > 13) Then
                msgError &= "El Rfc del Receptor debe ser de longitud minima 12 y maxima 13." & vbCrLf
            ElseIf Not (valida_RFC(AddMasFactura.Rfcrec)) Then
                msgError &= "El Rfc del Receptor tiene una estructura incorrecta." & vbCrLf
            End If

            If (AddMasFactura.Nomrec = "") Then
                msgError &= "Indique el Nombre del Receptor." & vbCrLf
            End If

            If (AddMasFactura.Calrec = "") Then
                msgError &= "Indique la Calle del Receptor." & vbCrLf
            End If

            If (AddMasFactura.Pairec = "") Then
                msgError &= "Indique el Pais del Receptor." & vbCrLf
            End If

            If (AddMasFactura.Codrec <> "") Then
                If (AddMasFactura.Codrec.Length <> 5) Then
                    msgError &= "El Codigo Postal del Receptor debe ser de longitud 5." & vbCrLf
                End If
            End If

            If (NombreAdd = "WM") Then
                If (AddMasFactura.Eanrec = "") Then
                    msgError &= "Indique el EAN del Receptor." & vbCrLf
                ElseIf (AddMasFactura.Eanrec.Length < 12 Or AddMasFactura.Eanrec.Length > 13) Then
                    msgError &= "El EAN del Receptor debe ser de longitud minima 12 y maxima 13." & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Eanrec)) Then
                    msgError &= "El EAN del Receptor debe ser numérico." & vbCrLf
                End If
            Else
                If (AddMasFactura.Eanrec <> "") Then
                    If (AddMasFactura.Eanrec.Length < 12 Or AddMasFactura.Eanrec.Length > 13) Then
                        msgError &= "El EAN del Receptor debe ser de longitud minima 12 y maxima 13." & vbCrLf
                    ElseIf Not (IsNumeric(AddMasFactura.Eanrec)) Then
                        msgError &= "El EAN del Receptor debe ser numérico." & vbCrLf
                    End If
                End If
            End If

            If (AddMasFactura.Bodrec <> "") Then
                If Not (IsNumeric(AddMasFactura.Bodrec)) Then
                    msgError &= "La Bodega Receptora debe ser numérico." & vbCrLf
                End If
            End If

            If (AddMasFactura.Ri_rec <> "") Then
                If Not (IsNumeric(AddMasFactura.Ri_rec)) Then
                    msgError &= "El RI Receptor debe ser numérico." & vbCrLf
                End If
            End If

            'LUGAR DE RECEPCION
            If (AddMasFactura.Rfcent = "") Then
                msgError &= "Indique el Rfc del Lugar de Recepción." & vbCrLf
            ElseIf (AddMasFactura.Rfcent.Length < 12 Or AddMasFactura.Rfcent.Length > 13) Then
                msgError &= "El Rfc del Lugar de Recepción debe ser de longitud minima 12 y maxima 13." & vbCrLf
            ElseIf Not (valida_RFC(AddMasFactura.Rfcent)) Then
                msgError &= "El Rfc del Lugar de Recepción tiene una estructura incorrecta." & vbCrLf
            End If

            If (NombreAdd = "CH" Or NombreAdd = "WM") Then
                If (AddMasFactura.Noment = "") Then
                    msgError &= "Indique el Nombre del Lugar de Recepción." & vbCrLf
                End If

                If (AddMasFactura.Calent = "") Then
                    msgError &= "Indique la Calle del Lugar de Recepción." & vbCrLf
                End If
            End If

            If (AddMasFactura.Codent <> "") Then
                If (AddMasFactura.Codent.Length <> 5) Then
                    msgError &= "El Codigo Postal del Lugar de Recepción debe ser de longitud 5." & vbCrLf
                End If
            End If

            If (AddMasFactura.Eanent = "") Then
                msgError &= "Indique el EAN del Lugar de Recepción." & vbCrLf
            ElseIf (AddMasFactura.Eanent.Length < 12 Or AddMasFactura.Eanent.Length > 13) Then
                msgError &= "El EAN del Lugar de Recepción debe ser de longitud minima 12 y maxima 13." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Eanent)) Then
                msgError &= "El EAN del Lugar de Recepción debe ser numérico." & vbCrLf
            End If

            If (AddMasFactura.Bodent <> "") Then
                If Not (IsNumeric(AddMasFactura.Bodent)) Then
                    msgError &= "La Bodega Destino debe ser numérico." & vbCrLf
                End If
            End If

            If (msgError = "") Then
                isValid_Receptor = True
            Else
                isValid_Receptor = False
                ValidaCFDi.AgregaRespuesta("07", 0, msgError, Resp)
            End If
        Catch ex As Exception
            isValid_Receptor = False
            ValidaCFDi.AgregaRespuesta("07", 0, ex.Message, Resp)
        End Try
    End Function

    Public Function isValid_Totales(ByRef Resp As List(Of RespuestaPremium), _
                                    ByVal AddMasFactura As MasFactur.AddMasFactura.DocumentoFacturaMasFactura, _
                                    ByVal NombreAdd As String) As Boolean
        Dim msgError As String = ""
        Try
            'TOTALES
            If (AddMasFactura.Totlpf = "") Then
                msgError &= "Indique el No. de Partidas." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Totlpf)) Then
                msgError &= "El No. de Partidas debe ser numérico." & vbCrLf
            End If

            If (NombreAdd = "WM") Then
                If (AddMasFactura.Subtbr = "") Then
                    msgError &= "Indique el Subtotal Bruto." & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Subtbr)) Then
                    msgError &= "El Subtotal Bruto debe ser numérico." & vbCrLf
                End If
            End If

            If (AddMasFactura.Mondeg <> "") Then
                If Not (IsNumeric(AddMasFactura.Mondeg)) Then
                    msgError &= "El Descuento por Partidas debe ser numérico." & vbCrLf
                End If
            End If

            If (AddMasFactura.Subto2 <> "") Then
                If Not (IsNumeric(AddMasFactura.Subto2)) Then
                    msgError &= "El Subtotal - (Descuentos por Partida) debe ser numérico." & vbCrLf
                End If
            End If

            If (NombreAdd = "CH") Then
                If Not (IsNumeric(AddMasFactura.Coddes)) Then
                    msgError &= "El Código del Descuento General debe ser numérico." & vbCrLf
                ElseIf (AddMasFactura.Coddes.Length > 3) Then
                    msgError &= "El Código del Descuento General debe ser de longitud maxima 3." & vbCrLf
                End If
            End If

            If (AddMasFactura.Mondet = "") Then
                msgError &= "Indique el Descuento Total." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Mondet)) Then
                msgError &= "El Descuento Total debe ser numérico." & vbCrLf
            End If

            If (AddMasFactura.Prcdsg = "") Then
                msgError &= "Indique el % Desc. General." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Prcdsg)) Then
                msgError &= "El % Desc. General debe ser numérico." & vbCrLf
            End If

            If (AddMasFactura.Prcdsg_r <> "") Then
                If Not (IsNumeric(AddMasFactura.Prcdsg_r)) Then
                    msgError &= "El % Desc. General debe ser numérico." & vbCrLf
                End If
            End If

            If (NombreAdd = "CH" Or NombreAdd = "WM") Then
                If (AddMasFactura.Subtsi = "") Then
                    msgError &= "Indique el Subtotal Neto c/IVA." & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Subtsi)) Then
                    msgError &= "El Subtotal Neto c/IVA debe ser numérico." & vbCrLf
                End If
            End If

            If (NombreAdd = "WM" Or NombreAdd = "CH") Then
                If (AddMasFactura.Subtai = "") Then
                    msgError &= "Indique el Subtotal Neto s/IVA." & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Subtai)) Then
                    msgError &= "El Subtotal Neto c/IVA debe ser numérico." & vbCrLf
                End If
            End If

            If (NombreAdd = "WM" Or NombreAdd = "SO") Then
                If (AddMasFactura.Subtot = "") Then
                    msgError &= "Indique el Subtotal Neto." & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Subtot)) Then
                    msgError &= "El Subtotal Neto debe ser numérico." & vbCrLf
                End If
            End If

            If (AddMasFactura.Totiva = "") Then
                msgError &= "Indique la Tasa IVA." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Totiva)) Then
                msgError &= "La Tasa IVA debe ser numérico." & vbCrLf
            End If

            If (AddMasFactura.Ivatra = "") Then
                msgError &= "Indique el Monto IVA." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Ivatra)) Then
                msgError &= "El Monto IVA debe ser numérico." & vbCrLf
            End If

            If (AddMasFactura.Tatiep = "") Then
                msgError &= "Indique la Tasa IEPS." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Tatiep)) Then
                msgError &= "La Tasa IEPS debe ser numérico." & vbCrLf
            End If

            If (AddMasFactura.Ieptra = "") Then
                msgError &= "Indique el Monto IEPS." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Ieptra)) Then
                msgError &= "El Monto IEPS debe ser numérico." & vbCrLf
            End If

            If (AddMasFactura.Ivaret = "") Then
                msgError &= "Indique el IVA Retenido." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Ivaret)) Then
                msgError &= "El IVA Retenido debe ser numérico." & vbCrLf
            End If

            If (AddMasFactura.Prc_ivaret = "") Then
                msgError &= "Indique el % IVA Ret." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Prc_ivaret)) Then
                msgError &= "El % IVA Ret debe ser numérico." & vbCrLf
            End If

            If (AddMasFactura.Isrret = "") Then
                msgError &= "Indique el Monto ISR Ret." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Isrret)) Then
                msgError &= "El Monto ISR Ret. debe ser numérico." & vbCrLf
            End If

            If (AddMasFactura.Prc_isrret = "") Then
                msgError &= "Indique el %ISR Ret." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Prc_isrret)) Then
                msgError &= "El %ISR Ret. debe ser numérico." & vbCrLf
            End If

            If (AddMasFactura.Totpag = "") Then
                msgError &= "Indique el Total a Pagar." & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Totpag)) Then
                msgError &= "El Total a Pagar debe ser numérico." & vbCrLf
            End If

            If (msgError = "") Then
                isValid_Totales = True
            Else
                isValid_Totales = False
                ValidaCFDi.AgregaRespuesta("07", 0, msgError, Resp)
            End If
        Catch ex As Exception
            isValid_Totales = False
            ValidaCFDi.AgregaRespuesta("07", 0, ex.Message, Resp)
        End Try
    End Function

    Public Function isValid_Conceptos(ByRef Resp As List(Of RespuestaPremium), _
                                      ByVal AddMasFactura As MasFactur.AddMasFactura.DocumentoFacturaMasFactura, _
                                      ByVal NombreAdd As String, ByVal i As Integer) As Boolean
        Dim msgError As String = ""
        Try
            'CONCEPTOS
            If (AddMasFactura.Conceptos(i).Cantid = "") Then
                msgError &= "Indique la Cantidad Facturada. (Concepto:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Cantid)) Then
                msgError &= "La Cantidad Facturada debe ser numérica. (Concepto:" & i & ")" & vbCrLf
            End If

            If (AddMasFactura.Conceptos(i).Cantip <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Cantip)) Then
                    msgError &= "La Cantidad Pedida debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Canpaq <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Canpaq)) Then
                    msgError &= "La Cantidad de Paquetes Facturados debe ser numérica. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (NombreAdd = "CH") Then
                If (AddMasFactura.Conceptos(i).Canemp = "") Then
                    msgError &= "Indique la Cantidad Empacada. (Concepto:" & i & ")" & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Canemp)) Then
                    msgError &= "La Cantidad Empacada debe ser numérica. (Concepto:" & i & ")" & vbCrLf
                End If
            Else
                If (AddMasFactura.Conceptos(i).Canemp <> "") Then
                    If Not (IsNumeric(AddMasFactura.Conceptos(i).Canemp)) Then
                        msgError &= "La Cantidad Empacada debe ser numérica. (Concepto:" & i & ")" & vbCrLf
                    End If
                End If
            End If

            If (NombreAdd = "CH") Then
                If (AddMasFactura.Conceptos(i).Cvesku = "") Then
                    msgError &= "Indique la Clave Interna de la Cadena Comercial. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Codupc = "") Then
                msgError &= "Indique el Codigo EAN/UPC. (Concepto:" & i & ")" & vbCrLf
            ElseIf (AddMasFactura.Conceptos(i).Codupc.Length < 12 Or AddMasFactura.Conceptos(i).Codupc.Length > 14) Then
                msgError &= "El Codigo EAN/UPC debe ser de longitud minima 12 y maxima 14. (Concepto:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Codupc)) Then
                msgError &= "El Codigo EAN/UPC debe ser numérico. (Concepto:" & i & ")" & vbCrLf
            End If

            If (AddMasFactura.Conceptos(i).Piepem = "") Then
                msgError &= "Indique Piezas por Paquete. (Concepto:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Piepem)) Then
                msgError &= "Las Piezas por Paquete debe ser numérico. (Concepto:" & i & ")" & vbCrLf
            End If

            If (NombreAdd = "CH") Then
                If (AddMasFactura.Conceptos(i).Coddun = "") Then
                    msgError &= "Indique el Codigo DUN14. (Concepto:" & i & ")" & vbCrLf
                ElseIf (AddMasFactura.Conceptos(i).Coddun.Length > 14) Then
                    msgError &= "El Codigo DUN14 debe ser de longitud maxima 14. (Concepto:" & i & ")" & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Coddun)) Then
                    msgError &= "El Codigo DUN14 debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            Else
                If (AddMasFactura.Conceptos(i).Coddun <> "") Then
                    If (AddMasFactura.Conceptos(i).Coddun.Length > 14) Then
                        msgError &= "El Codigo DUN14 debe ser de longitud maxima 14. (Concepto:" & i & ")" & vbCrLf
                    ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Coddun)) Then
                        msgError &= "El Codigo DUN14 debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                    End If
                End If
            End If

            'If (NombreAdd = "CH" Or NombreAdd = "WM") Then
            '    If (AddMasFactura.Conceptos(i).Estilv = "") Then
            '        msgError &= "Indique el Estilo del Vendedor. (Concepto:" & i & ")" & vbCrLf
            '    End If
            'End If

            'If (NombreAdd = "CH") Then
            '    If (AddMasFactura.Conceptos(i).Colorv = "") Then
            '        msgError &= "Indique el Color del Vendedor. (Concepto:" & i & ")" & vbCrLf
            '    End If
            '    If (AddMasFactura.Conceptos(i).Tallav = "") Then
            '        msgError &= "Indique la Talla del Vendedor. (Concepto:" & i & ")" & vbCrLf
            '    End If
            'End If

            If (AddMasFactura.Conceptos(i).Descri = "") Then
                msgError &= "Indique la Descripcion del Producto o Servicio. (Concepto:" & i & ")" & vbCrLf
            End If

            If (AddMasFactura.Conceptos(i).Pbrude = "") Then
                msgError &= "Indique el Precio Unitario Bruto. (Concepto:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Pbrude)) Then
                msgError &= "El Precio Unitario Bruto debe ser numérico. (Concepto:" & i & ")" & vbCrLf
            End If

            If (AddMasFactura.Conceptos(i).Impbru <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Impbru)) Then
                    msgError &= "El Importe Bruto debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Tdecon = "") Then
                msgError &= "Indique el % de Desc. Total. (Concepto:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Tdecon)) Then
                msgError &= "El % de Desc. Toal debe ser numérico. (Concepto:" & i & ")" & vbCrLf
            End If

            If (AddMasFactura.Conceptos(i).Mdecon = "") Then
                msgError &= "Indique el Monto de Descuento Total. (Concepto:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Mdecon)) Then
                msgError &= "El Monto de Descuento Total debe ser numérico. (Concepto:" & i & ")" & vbCrLf
            End If

            If (NombreAdd = "CH") Then
                If (AddMasFactura.Conceptos(i).Cdecon = "") Then
                    msgError &= "Indique el Codigo del Descuento. (Concepto:" & i & ")" & vbCrLf
                ElseIf (AddMasFactura.Conceptos(i).Cdecon.ToString().Length > 3) Then
                    msgError &= "El Codigo del Descuento debe ser de longitud maxima 3. (Concepto:" & i & ")" & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Cdecon)) Then
                    msgError &= "El Codigo del Descuento debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            Else
                If (AddMasFactura.Conceptos(i).Cdecon <> "") Then
                    If (AddMasFactura.Conceptos(i).Cdecon.ToString().Length > 3) Then
                        msgError &= "El Codigo del Descuento debe ser de longitud maxima 3. (Concepto:" & i & ")" & vbCrLf
                    ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Cdecon)) Then
                        msgError &= "El Codigo del Descuento debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                    End If
                End If
            End If

            If (AddMasFactura.Conceptos(i).Valuni = "") Then
                msgError &= "Indique el Precio Unitario Neto. (Concepto:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Valuni)) Then
                msgError &= "El Precio Unitario Neto debe ser numérico. (Concepto:" & i & ")" & vbCrLf
            End If

            If (AddMasFactura.Conceptos(i).Import = "") Then
                msgError &= "Indique el Importe Neto. (Concepto:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Import)) Then
                msgError &= "El Importe Neto debe ser numérico. (Concepto:" & i & ")" & vbCrLf
            End If

            If (AddMasFactura.Conceptos(i).Tdecon0 <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Tdecon0)) Then
                    msgError &= "El % de Descuento 1 debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Mdecon0 <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Mdecon0)) Then
                    msgError &= "El Monto de descuento 1 debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Tdecon1 <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Tdecon1)) Then
                    msgError &= "El % de Descuento 2 debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Mdecon1 <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Mdecon1)) Then
                    msgError &= "El Monto de descuento 2 debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Tdecon2 <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Tdecon2)) Then
                    msgError &= "El % de Descuento 3 debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Mdecon2 <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Mdecon2)) Then
                    msgError &= "El Monto de Descuento 3 debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Tdecon3 <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Tdecon3)) Then
                    msgError &= "El % de Descuento 4 debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Mdecon3 <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Mdecon3)) Then
                    msgError &= "El Monto de Descuento 4 debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Tasipe = "") Then
                msgError &= "Indique el % del IVA Trasladado. (Concepto:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Tasipe)) Then
                msgError &= "El % del IVA Trasladado debe ser numérico. (Concepto:" & i & ")" & vbCrLf
            End If

            If (NombreAdd = "CH" Or NombreAdd = "WM") Then
                If (AddMasFactura.Conceptos(i).Monipe = "") Then
                    msgError &= "Indique el Monto de IVA Trasladado. (Concepto:" & i & ")" & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Monipe)) Then
                    msgError &= "El Monto de IVA Trasladado debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            Else
                If (AddMasFactura.Conceptos(i).Monipe <> "") Then
                    If Not (IsNumeric(AddMasFactura.Conceptos(i).Monipe)) Then
                        msgError &= "El Monto de IVA Trasladado debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                    End If
                End If
            End If

            If (AddMasFactura.Conceptos(i).Tasiep = "") Then
                msgError &= "Indique el % del IEPS Trasladado. (Concepto:" & i & ")" & vbCrLf
            ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Tasiep)) Then
                msgError &= "El % del IEPS Trasladado debe ser numérico. (Concepto:" & i & ")" & vbCrLf
            End If

            If (NombreAdd = "CH" Or NombreAdd = "WM") Then
                If (AddMasFactura.Conceptos(i).Moniep = "") Then
                    msgError &= "Indique el Monto de IEPS Trasladado. (Concepto:" & i & ")" & vbCrLf
                ElseIf Not (IsNumeric(AddMasFactura.Conceptos(i).Moniep)) Then
                    msgError &= "El Monto de IEPS Trasladado debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            Else
                If (AddMasFactura.Conceptos(i).Moniep <> "") Then
                    If Not (IsNumeric(AddMasFactura.Conceptos(i).Moniep)) Then
                        msgError &= "El Monto de IEPS Trasladado debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                    End If
                End If
            End If

            If (AddMasFactura.Conceptos(i).Ivaret_p <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Ivaret_p)) Then
                    msgError &= "El % de IVA Retenido debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Ivaret_d <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Ivaret_d)) Then
                    msgError &= "El Monto de IVA Retenido debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Isrret_p <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Isrret_p)) Then
                    msgError &= "El % de ISR Retenido debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Isrret_d <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Isrret_d)) Then
                    msgError &= "El Monto de ISR Retenido debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Numadu <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Numadu)) Then
                    msgError &= "El Numero o Clave del Pedimento Aduanal debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Fecadu <> "") Then
                If (AddMasFactura.Conceptos(i).Fecadu.Length <> 10) Then
                    msgError &= "La Fecha del Documento Aduanal debe ser de longitud 10. (Concepto:" & i & ")" & vbCrLf
                Else
                    Try
                        Convert.ToDateTime(AddMasFactura.Conceptos(i).Fecadu)
                    Catch ex As Exception
                        msgError &= "La Fecha del Documento Aduanal tiene formato incorrecto. (Concepto:" & i & ")" & vbCrLf
                    End Try
                End If
            End If

            If (AddMasFactura.Conceptos(i).Eanadu <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Eanadu)) Then
                    msgError &= "El Codigo EAN de la Aduana debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Cuepre <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Cuepre)) Then
                    msgError &= "La Cuenta Predial debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (AddMasFactura.Conceptos(i).Numlin <> "") Then
                If Not (IsNumeric(AddMasFactura.Conceptos(i).Numlin)) Then
                    msgError &= "El Numero de Partida debe ser numérico. (Concepto:" & i & ")" & vbCrLf
                End If
            End If

            If (msgError = "") Then
                isValid_Conceptos = True
            Else
                isValid_Conceptos = False
                ValidaCFDi.AgregaRespuesta("07", 0, msgError, Resp)
            End If
        Catch ex As Exception
            isValid_Conceptos = False
            ValidaCFDi.AgregaRespuesta("07", 0, ex.Message, Resp)
        End Try
    End Function
#End Region

   

    Public Function creaXML(ByVal AddMasFactura As MasFactur.AddMasFactura.DocumentoFacturaMasFactura) As String
        Dim xmlAddenda As XmlDocument = New XmlDocument()
        Dim xmlAtt As XmlAttribute
        Dim xmlnsManager As New System.Xml.XmlNamespaceManager(xmlAddenda.NameTable)
        xmlnsManager.AddNamespace("mf", "http://www.masteredi.com.mx/masfactura2")

        'Addenda
        Dim encabezadoNd As XmlNode = xmlAddenda.CreateElement("mf", "MASFACTURA2", "http://www.masteredi.com.mx/masfactura2")
        xmlAddenda.AppendChild(encabezadoNd)
        Try
            xmlAtt = xmlAddenda.CreateAttribute("xsi", "schemaLocation", "http://www.w3.org/2001/XMLSchema-instance")
            xmlAtt.Value = "http://www.masteredi.com.mx/masfactura2 http://www.masteredi.com.mx/masfacturanet/masfactura2.xsd"

            encabezadoNd.Attributes.Append(xmlAtt)
            'Elemento Padre De Addenda
            'Dim ENC As XmlNode = xmlAddenda.CreateElement("MASFACTURA2")
            'encabezadoNd.AppendChild(ENC)
            'ENCABEZADO
            Dim ENCAB As XmlNode = xmlAddenda.CreateElement("mf", "ENCAB", "http://www.masteredi.com.mx/masfactura2")

            'DATOS GENERALES
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Versio, "VERSIO")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Tradpp, "TRADPP")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Ctppro, "CTPPRO")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Numfol, "NUMFOL")
            If (AddMasFactura.Serfol <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Serfol, "SERFOL")
            End If
            'IntegraNodo(ENCAB, xmlAddenda, Convert.ToDateTime(AddMasFactura.Fecexp).ToString("yyyy-MM-ddTHH:mm:ss"), "FECEXP")
            IntegraNodo(ENCAB, xmlAddenda, Convert.ToDateTime(AddMasFactura.Fecexp).ToString("yyyy-MM-dd"), "FECEXP")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Noapro, "NOAPRO")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Forpag, "FORPAG")
            If (AddMasFactura.Metpag <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Metpag, "METPAG")
            End If
            If (AddMasFactura.Numche <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Numche, "NUMCHE")
            End If
            If (AddMasFactura.Tipdoc <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Tipdoc, "TIPDOC")
            End If
            If (AddMasFactura.Nomdoc <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Nomdoc, "NOMDOC")
            End If
            If (AddMasFactura.Fundoc <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Fundoc, "FUNDOC")
            End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Tipmon, "TIPMON")
            'If (AddMasFactura.Tipcam.ToString() <> "" And AddMasFactura.Tipmon.ToString() <> "MXN") Then
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Tipcam, "TIPCAM")
            'End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Diapag, "DIAPAG")
            If (AddMasFactura.Pdppag <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Pdppag, "PDPPAG")
            End If
            If (AddMasFactura.Mdppag <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Mdppag, "MDPPAG")
            End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Numeoc, "NUMEOC")
            IntegraNodo(ENCAB, xmlAddenda, Convert.ToDateTime(AddMasFactura.Fechoc).ToString("yyyy-MM-dd"), "FECHOC")
            If (AddMasFactura.Notas1 <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Notas1, "NOTAS1")
            End If
            If (AddMasFactura.Notas2 <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Notas2, "NOTAS2")
            End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Notas3, "NOTAS3")
            If (AddMasFactura.Numdpt.ToString() <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Numdpt, "NUMDPT")
            End If
            If (AddMasFactura.Nomdpt.ToString() <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Nomdpt, "NOMDPT")
            End If
            If (AddMasFactura.Feccon.ToString() <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, Convert.ToDateTime(AddMasFactura.Feccon).ToString("yyyy-MM-dd"), "FECCON")
            End If
            If (AddMasFactura.Contra.ToString() <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Contra, "CONTRA")
            End If
            If (AddMasFactura.Tda_contra.ToString() <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Tda_contra, "TDA_CONTRA")
            End If
            If (AddMasFactura.Po_numeoc.ToString() <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Po_numeoc, "PO_NUMEOC")
            End If
            If (AddMasFactura.Ieps_id.ToString() <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Ieps_id, "IEPS_ID")
            End If
            If (AddMasFactura.Reffac.ToString() <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Reffac, "REFFAC")
            End If
            If (AddMasFactura.Hojneg.ToString() <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Hojneg, "HOJNEG")
            End If
            If (AddMasFactura.Numcli.ToString() <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Numcli, "NUMCLI")
            End If
            If (AddMasFactura.Flete.ToString() <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Flete, "FLETE")
            End If
            'EMISOR
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Rfcemi, "RFCEMI")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Nomemi, "NOMEMI")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Eanemi, "EANEMI")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Numemi, "NUMEMI")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Calemi, "CALEMI")
            If (AddMasFactura.Nexemi <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Nexemi, "NEXEMI")
            End If
            If (AddMasFactura.Ninemi <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Ninemi, "NINEMI")
            End If
            If (AddMasFactura.Colemi <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Colemi, "COLEMI")
            End If
            If (AddMasFactura.Locemi <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Locemi, "LOCEMI")
            End If
            If (AddMasFactura.Refemi <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Refemi, "REFEMI")
            End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Munemi, "MUNEMI")
            If (AddMasFactura.Estemi <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Estemi, "ESTEMI")
            End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Paiemi, "PAIEMI")
            If (AddMasFactura.Codemi <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Codemi, "CODEMI")
            End If
            If (AddMasFactura.Mailemi <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Mailemi, "MAILEMI")
            End If
            If (AddMasFactura.Ri_emi <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Ri_emi, "RI_EMI")
            End If

            'LUGAR DE EXPEDICION
            If (AddMasFactura.Calexp <> "" Or AddMasFactura.Ninexp <> "" Or AddMasFactura.Colexp <> "" Or _
                AddMasFactura.Locexp <> "" Or AddMasFactura.Refexp <> "" Or AddMasFactura.Munexp <> "" Or _
                AddMasFactura.Estexp <> "" Or AddMasFactura.Paiexp <> "" Or AddMasFactura.Codexp <> "" Or _
                AddMasFactura.Eanexp <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Calexp, "CALEXP")
                If (AddMasFactura.Nexexp <> "") Then
                    IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Nexexp, "NEXEXP")
                End If
                If (AddMasFactura.Ninexp <> "") Then
                    IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Ninexp, "NINEXP")
                End If
                If (AddMasFactura.Colexp <> "") Then
                    IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Colexp, "COLEXP")
                End If
                If (AddMasFactura.Locexp <> "") Then
                    IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Locexp, "LOCEXP")
                End If
                If (AddMasFactura.Refexp <> "") Then
                    IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Refexp, "REFEXP")
                End If
                If (AddMasFactura.Munexp <> "") Then
                    IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Munexp, "MUNEXP")
                End If
                If (AddMasFactura.Estexp <> "") Then
                    IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Estexp, "ESTEXP")
                End If
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Paiexp, "PAIEXP")
                If (AddMasFactura.Codexp <> "") Then
                    IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Codexp, "CODEXP")
                End If
                If (AddMasFactura.Eanexp <> "") Then
                    IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Eanexp, "EANEXP")
                End If
            End If

            'RECEPTOR
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Rfcrec, "RFCREC")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Nomrec, "NOMREC")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Calrec, "CALREC")
            If (AddMasFactura.Nexrec <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Nexrec, "NEXREC")
            End If
            If (AddMasFactura.Ninrec <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Ninrec, "NINREC")
            End If
            If (AddMasFactura.Colrec <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Colrec, "COLREC")
            End If
            If (AddMasFactura.Locrec <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Locrec, "LOCREC")
            End If
            If (AddMasFactura.Refrec <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Refrec, "REFREC")
            End If
            If (AddMasFactura.Munrec <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Munrec, "MUNREC")
            End If
            If (AddMasFactura.Estrec <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Estrec, "ESTREC")
            End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Pairec, "PAIREC")
            If (AddMasFactura.Codrec <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Codrec, "CODREC")
            End If
            If (AddMasFactura.Eanrec <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Eanrec, "EANREC")
            End If
            If (AddMasFactura.Bodrec <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Bodrec, "BODREC")
            End If
            If (AddMasFactura.Ri_rec <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Ri_rec, "RI_REC")
            End If

            'LUGAR DE RECEPCION
            If (AddMasFactura.Rfcent <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Rfcent, "RFCENT")
            End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Noment, "NOMENT")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Calent, "CALENT")
            If (AddMasFactura.Nexent <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Nexent, "NEXENT")
            End If
            If (AddMasFactura.Ninent <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Ninent, "NINENT")
            End If
            If (AddMasFactura.Colent <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Colent, "COLENT")
            End If
            If (AddMasFactura.Locent <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Locent, "LOCENT")
            End If
            If (AddMasFactura.Refent <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Refent, "REFENT")
            End If
            If (AddMasFactura.Munent <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Munent, "MUNENT")
            End If
            If (AddMasFactura.Estent <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Estent, "ESTENT")
            End If
            If (AddMasFactura.Paient <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Paient, "PAIENT")
            End If
            If (AddMasFactura.Codent <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Codent, "CODENT")
            End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Eanent, "EANENT")
            If (AddMasFactura.Numtie <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Numtie, "NUMTIE")
            End If
            If (AddMasFactura.Bodent <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Bodent, "BODENT")
            End If

            'TOTALES
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Totlpf, "TOTLPF")
            If (AddMasFactura.Subtbr <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Subtbr, "SUBTBR")
            End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Mondes, "MONDES")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Subto2, "SUBTO2")
            If (AddMasFactura.Coddes <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Coddes, "CODDES")
            End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Mondet, "MONDET")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Prcdsg, "PRCDSG")
            If (AddMasFactura.Prcdsg_r <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Prcdsg_r, "PRCDSG_R")
            End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Subtsi, "SUBTSI")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Subtai, "SUBTAI")
            If (AddMasFactura.Subtot <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Subtot, "SUBTOT")
            End If
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Totiva, "TOTIVA")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Ivatra, "IVATRA")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Tatiep, "TATIEP")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Ieptra, "IEPTRA")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Ivaret, "IVARET")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Prc_ivaret, "PRC_IVARET")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Isrret, "ISRRET")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Prc_isrret, "PRC_ISRRET")
            IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Totpag, "TOTPAG")
            If (AddMasFactura.Prdesg_1 <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Prdesg_1, "PRDESG_1")
            End If
            If (AddMasFactura.Mondeg_1 <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Mondeg_1, "MONDEG_1")
            End If
            If (AddMasFactura.Subto3 <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Subto3, "SUBTO3")
            End If
            If (AddMasFactura.Prdesg_2 <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Prdesg_2, "PRDESG_2")
            End If
            If (AddMasFactura.Mondeg_2 <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Mondeg_2, "MONDEG_2")
            End If
            If (AddMasFactura.Subto4 <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Subto4, "SUBTO4")
            End If
            If (AddMasFactura.Prdesg_3 <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Prdesg_3, "PRDESG_3")
            End If
            If (AddMasFactura.Mondeg_3 <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Mondeg_3, "MONDEG_3")
            End If
            If (AddMasFactura.Subtot1 <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Subtot1, "SUBTOT")
            End If
            If (AddMasFactura.Prdesg <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Prdesg, "PRDESG")
            End If
            If (AddMasFactura.Mondeg <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Mondeg, "MONDEG")
            End If
            If (AddMasFactura.Totcan <> "") Then
                IntegraNodo(ENCAB, xmlAddenda, AddMasFactura.Totcan, "TOTCAN")
            End If

            encabezadoNd.AppendChild(ENCAB)

            'CONCEPTOS
            Dim DETALLE As XmlNode = xmlAddenda.CreateElement("mf", "DETALLE", "http://www.masteredi.com.mx/masfactura2")

            For Each dr As MasFactur.AddMasFactura.Detalle In AddMasFactura.Conceptos
                Dim PARTIDA As XmlNode = xmlAddenda.CreateElement("mf", "PARTIDA", "http://www.masteredi.com.mx/masfactura2")
                IntegraNodo(PARTIDA, xmlAddenda, dr.Cantid, "CANTID")
                If (dr.Cantip <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Cantip, "CANTIP")
                End If
                If (dr.Canpaq <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Canpaq, "CANPAQ")
                End If
                If (dr.Canemp <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Canemp, "CANEMP")
                End If
                If (dr.Unidad <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Unidad, "UNIDAD")
                End If
                If (dr.Cvesku <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Cvesku, "CVESKU")
                End If
                IntegraNodo(PARTIDA, xmlAddenda, dr.Codupc, "CODUPC")
                IntegraNodo(PARTIDA, xmlAddenda, dr.Piepem, "PIEPEM")
                If (dr.Coddun <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Coddun, "CODDUN")
                End If
                If (dr.Estilv <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Estilv, "ESTILV")
                End If
                If (dr.Colorv <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Colorv, "COLORV")
                End If
                If (dr.Tallav <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Tallav, "TALLAV")
                End If
                IntegraNodo(PARTIDA, xmlAddenda, dr.Descri, "DESCRI")
                IntegraNodo(PARTIDA, xmlAddenda, dr.Pbrude, "PBRUDE")
                If (dr.Impbru <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Impbru, "IMPBRU")
                End If
                IntegraNodo(PARTIDA, xmlAddenda, dr.Tdecon, "TDECON")
                IntegraNodo(PARTIDA, xmlAddenda, dr.Mdecon, "MDECON")
                If (dr.Cdecon <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Cdecon, "CDECON")
                End If
                IntegraNodo(PARTIDA, xmlAddenda, dr.Valuni, "VALUNI")
                IntegraNodo(PARTIDA, xmlAddenda, dr.Import, "IMPORT")
                If (dr.Tdecon0 <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Tdecon0, "TDECON0")
                End If
                If (dr.Mdecon0 <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Mdecon0, "MDECON0")
                End If
                If (dr.Tdecon1 <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Tdecon1, "TDECON1")
                End If
                If (dr.Mdecon1 <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Mdecon1, "MDECON1")
                End If
                If (dr.Tdecon2 <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Tdecon2, "TDECON2")
                End If
                If (dr.Mdecon2 <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Mdecon2, "MDECON2")
                End If
                If (dr.Tdecon3 <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Tdecon3, "TDECON3")
                End If
                If (dr.Mdecon3 <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Mdecon3, "MDECON3")
                End If
                IntegraNodo(PARTIDA, xmlAddenda, dr.Tasipe, "TASIPE")
                IntegraNodo(PARTIDA, xmlAddenda, dr.Monipe, "MONIPE")
                IntegraNodo(PARTIDA, xmlAddenda, dr.Tasiep, "TASIEP")
                IntegraNodo(PARTIDA, xmlAddenda, dr.Moniep, "MONIEP")
                If (dr.Ivaret_p <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Ivaret_p, "IVARET_P")
                End If
                If (dr.Ivaret_d <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Ivaret_d, "IVARET_D")
                End If
                If (dr.Isrret_p <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Isrret_p, "ISRRET_P")
                End If
                If (dr.Isrret_d <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Isrret_d, "ISRRET_D")
                End If
                If (dr.Numadu <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Numadu, "NUMADU")
                End If
                If (dr.Fecadu <> "" And _
                    dr.Numadu <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, Format(Convert.ToDateTime(dr.Fecadu), "yyyy-MM-dd"), "FECADU")
                End If
                If (dr.Aduana <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Aduana, "ADUANA")
                End If
                If (dr.Eanadu <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Eanadu, "EANADU")
                End If
                If (dr.Cuepre <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Cuepre, "CUEPRE")
                End If
                If (dr.Notasp1 <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Notasp1, "NOTASP1")
                End If
                If (dr.Notasp2 <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Notasp2, "NOTASP2")
                End If
                If (dr.Material <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Material, "MATERIAL")
                End If
                If (dr.Relleno <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Relleno, "RELLENO")
                End If
                If (dr.Kilataje <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Kilataje, "KILATAJE")
                End If
                If (dr.Peso <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Peso, "PESO")
                End If
                If (dr.Numlin <> "") Then
                    IntegraNodo(PARTIDA, xmlAddenda, dr.Numlin, "NUMLIN")
                End If
                DETALLE.AppendChild(PARTIDA)
            Next

            encabezadoNd.AppendChild(DETALLE)

            Return xmlAddenda.InnerXml

        Catch ex As Exception
            Throw New Exception("Ocurrió un error al generar la Addenda: " & ex.Message)
        End Try
    End Function

    Public Sub creaTXT(ByVal AddMasFactura As MasFactur.AddMasFactura.DocumentoFacturaMasFactura, _
                            ByRef txt As String)
        Try
            Dim sw As New System.IO.StreamWriter(txt, True, System.Text.Encoding.UTF8)
            sw.WriteLine("ENCAB")
            If (AddMasFactura.Versio <> "") Then
                sw.WriteLine("VERSIO" & Chr(9) & AddMasFactura.Versio)
            End If
            If (AddMasFactura.Tradpp <> "") Then
                sw.WriteLine("TRADPP" & Chr(9) & AddMasFactura.Tradpp)
            End If
            If (AddMasFactura.Ctppro <> "") Then
                sw.WriteLine("CTPPRO" & Chr(9) & AddMasFactura.Ctppro)
            End If
            If (AddMasFactura.Numfol <> "") Then
                sw.WriteLine("NUMFOL" & Chr(9) & AddMasFactura.Numfol)
            End If
            If (AddMasFactura.Serfol <> "") Then
                sw.WriteLine("SERFOL" & Chr(9) & AddMasFactura.Serfol)
            End If
            If (AddMasFactura.Fecexp <> "") Then
                sw.WriteLine("FECEXP" & Chr(9) & Convert.ToDateTime(AddMasFactura.Fecexp).ToString("yyyy-MM-ddTHH:mm:ss"))
            End If
            If (AddMasFactura.Noapro <> "") Then
                sw.WriteLine("NOAPRO" & Chr(9) & AddMasFactura.Noapro)
            End If
            If (AddMasFactura.Forpag <> "") Then
                sw.WriteLine("FORPAG" & Chr(9) & AddMasFactura.Forpag)
            End If
            If (AddMasFactura.Metpag <> "") Then
                sw.WriteLine("METPAG" & Chr(9) & AddMasFactura.Metpag)
            End If
            If (AddMasFactura.Numche <> "") Then
                sw.WriteLine("NUMCHE" & Chr(9) & AddMasFactura.Numche)
            End If
            If (AddMasFactura.Tipdoc <> "") Then
                sw.WriteLine("TIPDOC" & Chr(9) & AddMasFactura.Tipdoc)
            End If
            If (AddMasFactura.Nomdoc <> "") Then
                sw.WriteLine("NOMDOC" & Chr(9) & AddMasFactura.Nomdoc)
            End If
            If (AddMasFactura.Fundoc <> "") Then
                sw.WriteLine("FUNDOC" & Chr(9) & AddMasFactura.Fundoc)
            End If
            If (AddMasFactura.Tipmon <> "") Then
                sw.WriteLine("TIPMON" & Chr(9) & AddMasFactura.Tipmon)
            End If
            If (AddMasFactura.Tipcam.ToString() <> "" And AddMasFactura.Tipmon.ToString() <> "MXN") Then
                sw.WriteLine("TIPCAM" & Chr(9) & AddMasFactura.Tipcam)
            End If
            If (AddMasFactura.Diapag <> "") Then
                sw.WriteLine("DIAPAG" & Chr(9) & AddMasFactura.Diapag)
            End If
            If (AddMasFactura.Pdppag <> "") Then
                sw.WriteLine("PDPPAG" & Chr(9) & AddMasFactura.Pdppag)
            End If
            If (AddMasFactura.Mdppag <> "") Then
                sw.WriteLine("MDPPAG" & Chr(9) & AddMasFactura.Mdppag)
            End If
            If (AddMasFactura.Numeoc <> "") Then
                sw.WriteLine("NUMEOC" & Chr(9) & AddMasFactura.Numeoc)
            End If
            If (AddMasFactura.Fechoc <> "") Then
                sw.WriteLine("FECHOC" & Chr(9) & AddMasFactura.Fechoc)
            End If
            If (AddMasFactura.Notas1 <> "") Then
                sw.WriteLine("NOTAS1" & Chr(9) & AddMasFactura.Notas1)
            End If
            If (AddMasFactura.Notas2 <> "") Then
                sw.WriteLine("NOTAS2" & Chr(9) & AddMasFactura.Notas2)
            End If
            If (AddMasFactura.Notas3 <> "") Then
                sw.WriteLine("NOTAS3" & Chr(9) & AddMasFactura.Notas3)
            End If
            If (AddMasFactura.Numdpt.ToString() <> "") Then
                sw.WriteLine("NUMDPT" & Chr(9) & AddMasFactura.Numdpt)
            End If
            If (AddMasFactura.Nomdpt.ToString() <> "") Then
                sw.WriteLine("NOMDPT" & Chr(9) & AddMasFactura.Nomdpt)
            End If
            If (AddMasFactura.Feccon.ToString() <> "") Then
                sw.WriteLine("FECCON" & Chr(9) & AddMasFactura.Feccon)
            End If
            If (AddMasFactura.Contra.ToString() <> "") Then
                sw.WriteLine("CONTRA" & Chr(9) & AddMasFactura.Contra)
            End If
            If (AddMasFactura.Tda_contra.ToString() <> "") Then
                sw.WriteLine("TDA_CONTRA" & Chr(9) & AddMasFactura.Tda_contra)
            End If
            If (AddMasFactura.Po_numeoc.ToString() <> "") Then
                sw.WriteLine("PO_NUMEOC" & Chr(9) & AddMasFactura.Po_numeoc)
            End If
            If (AddMasFactura.Ieps_id.ToString() <> "") Then
                sw.WriteLine("IEPS_ID" & Chr(9) & AddMasFactura.Ieps_id)
            End If
            If (AddMasFactura.Reffac.ToString() <> "") Then
                sw.WriteLine("REFFAC" & Chr(9) & AddMasFactura.Reffac)
            End If
            If (AddMasFactura.Hojneg.ToString() <> "") Then
                sw.WriteLine("HOJNEG" & Chr(9) & AddMasFactura.Hojneg)
            End If
            If (AddMasFactura.Numcli.ToString() <> "") Then
                sw.WriteLine("NUMCLI" & Chr(9) & AddMasFactura.Numcli)
            End If
            If (AddMasFactura.Flete.ToString() <> "") Then
                sw.WriteLine("FLETE" & Chr(9) & AddMasFactura.Flete)
            End If
            ''EMISOR
            If (AddMasFactura.Rfcemi <> "") Then
                sw.WriteLine("RFCEMI" & Chr(9) & AddMasFactura.Rfcemi)
            End If
            If (AddMasFactura.Nomemi <> "") Then
                sw.WriteLine("NOMEMI" & Chr(9) & AddMasFactura.Nomemi)
            End If
            If (AddMasFactura.Eanemi <> "") Then
                sw.WriteLine("EANEMI" & Chr(9) & AddMasFactura.Eanemi)
            End If
            If (AddMasFactura.Numemi <> "") Then
                sw.WriteLine("NUMEMI" & Chr(9) & AddMasFactura.Numemi)
            End If
            If (AddMasFactura.Calemi <> "") Then
                sw.WriteLine("CALEMI" & Chr(9) & AddMasFactura.Calemi)
            End If
            If (AddMasFactura.Nexemi <> "") Then
                sw.WriteLine("NEXEMI" & Chr(9) & AddMasFactura.Nexemi)
            End If
            If (AddMasFactura.Ninemi <> "") Then
                sw.WriteLine("NINEMI" & Chr(9) & AddMasFactura.Ninemi)
            End If
            If (AddMasFactura.Colemi <> "") Then
                sw.WriteLine("COLEMI" & Chr(9) & AddMasFactura.Colemi)
            End If
            If (AddMasFactura.Locemi <> "") Then
                sw.WriteLine("LOCEMI" & Chr(9) & AddMasFactura.Locemi)
            End If
            If (AddMasFactura.Refemi <> "") Then
                sw.WriteLine("REFEMI" & Chr(9) & AddMasFactura.Refemi)
            End If
            If (AddMasFactura.Munemi <> "") Then
                sw.WriteLine("MUNEMI" & Chr(9) & AddMasFactura.Munemi)
            End If
            If (AddMasFactura.Estemi <> "") Then
                sw.WriteLine("ESTEMI" & Chr(9) & AddMasFactura.Estemi)
            End If
            If (AddMasFactura.Paiemi <> "") Then
                sw.WriteLine("PAIEMI" & Chr(9) & AddMasFactura.Paiemi)
            End If
            If (AddMasFactura.Codemi <> "") Then
                sw.WriteLine("CODEMI" & Chr(9) & AddMasFactura.Codemi)
            End If
            If (AddMasFactura.Mailemi <> "") Then
                sw.WriteLine("MAILEMI" & Chr(9) & AddMasFactura.Mailemi)
            End If
            If (AddMasFactura.Ri_emi <> "") Then
                sw.WriteLine("RI_EMI" & Chr(9) & AddMasFactura.Ri_emi)
            End If

            ''LUGAR DE EXPEDICION
            If (AddMasFactura.Calexp <> "" Or AddMasFactura.Ninexp <> "" Or AddMasFactura.Colexp <> "" Or _
                AddMasFactura.Locexp <> "" Or AddMasFactura.Refexp <> "" Or AddMasFactura.Munexp <> "" Or _
                AddMasFactura.Estexp <> "" Or AddMasFactura.Paiexp <> "" Or AddMasFactura.Codexp <> "" Or _
                AddMasFactura.Eanexp <> "") Then
                If (AddMasFactura.Calexp <> "") Then
                    sw.WriteLine("CALEXP" & Chr(9) & AddMasFactura.Calexp)
                End If
                If (AddMasFactura.Nexexp <> "") Then
                    sw.WriteLine("NEXEXP" & Chr(9) & AddMasFactura.Nexexp)
                End If
                If (AddMasFactura.Ninexp <> "") Then
                    sw.WriteLine("NINEXP" & Chr(9) & AddMasFactura.Ninexp)
                End If
                If (AddMasFactura.Colexp <> "") Then
                    sw.WriteLine("COLEXP" & Chr(9) & AddMasFactura.Colexp)
                End If
                If (AddMasFactura.Locexp <> "") Then
                    sw.WriteLine("LOCEXP" & Chr(9) & AddMasFactura.Locexp)
                End If
                If (AddMasFactura.Refexp <> "") Then
                    sw.WriteLine("REFEXP" & Chr(9) & AddMasFactura.Refexp)
                End If
                If (AddMasFactura.Munexp <> "") Then
                    sw.WriteLine("MUNEXP" & Chr(9) & AddMasFactura.Munexp)
                End If
                If (AddMasFactura.Estexp <> "") Then
                    sw.WriteLine("ESTEXP" & Chr(9) & AddMasFactura.Estexp)
                End If
                If (AddMasFactura.Paiexp <> "") Then
                    sw.WriteLine("PAIEXP" & Chr(9) & AddMasFactura.Paiexp)
                End If
                If (AddMasFactura.Codexp <> "") Then
                    sw.WriteLine("CODEXP" & Chr(9) & AddMasFactura.Codexp)
                End If
                If (AddMasFactura.Eanexp <> "") Then
                    sw.WriteLine("EANEXP" & Chr(9) & AddMasFactura.Eanexp)
                End If
            End If

            ''RECEPTOR
            If (AddMasFactura.Rfcrec <> "") Then
                sw.WriteLine("RFCREC" & Chr(9) & AddMasFactura.Rfcrec)
            End If
            If (AddMasFactura.Nomrec <> "") Then
                sw.WriteLine("NOMREC" & Chr(9) & AddMasFactura.Nomrec)
            End If
            If (AddMasFactura.Calrec <> "") Then
                sw.WriteLine("CALREC" & Chr(9) & AddMasFactura.Calrec)
            End If
            If (AddMasFactura.Nexrec <> "") Then
                sw.WriteLine("NEXREC" & Chr(9) & AddMasFactura.Nexrec)
            End If
            If (AddMasFactura.Ninrec <> "") Then
                sw.WriteLine("NINREC" & Chr(9) & AddMasFactura.Ninrec)
            End If
            If (AddMasFactura.Colrec <> "") Then
                sw.WriteLine("COLREC" & Chr(9) & AddMasFactura.Colrec)
            End If
            If (AddMasFactura.Locrec <> "") Then
                sw.WriteLine("LOCREC" & Chr(9) & AddMasFactura.Locrec)
            End If
            If (AddMasFactura.Refrec <> "") Then
                sw.WriteLine("REFREC" & Chr(9) & AddMasFactura.Refrec)
            End If
            If (AddMasFactura.Munrec <> "") Then
                sw.WriteLine("MUNREC" & Chr(9) & AddMasFactura.Munrec)
            End If
            If (AddMasFactura.Estrec <> "") Then
                sw.WriteLine("ESTREC" & Chr(9) & AddMasFactura.Estrec)
            End If
            If (AddMasFactura.Pairec <> "") Then
                sw.WriteLine("PAIREC" & Chr(9) & AddMasFactura.Pairec)
            End If
            If (AddMasFactura.Codrec <> "") Then
                sw.WriteLine("CODREC" & Chr(9) & AddMasFactura.Codrec)
            End If
            If (AddMasFactura.Eanrec <> "") Then
                sw.WriteLine("EANREC" & Chr(9) & AddMasFactura.Eanrec)
            End If
            If (AddMasFactura.Bodrec <> "") Then
                sw.WriteLine("BODREC" & Chr(9) & AddMasFactura.Bodrec)
            End If
            If (AddMasFactura.Ri_rec <> "") Then
                sw.WriteLine("RI_REC" & Chr(9) & AddMasFactura.Ri_rec)
            End If

            'LUGAR DE RECEPCION
            If (AddMasFactura.Rfcent <> "") Then
                sw.WriteLine("RFCENT" & Chr(9) & AddMasFactura.Rfcent)
            End If
            If (AddMasFactura.Noment <> "") Then
                sw.WriteLine("NOMENT" & Chr(9) & AddMasFactura.Noment)
            End If
            If (AddMasFactura.Calent <> "") Then
                sw.WriteLine("CALENT" & Chr(9) & AddMasFactura.Calent)
            End If
            If (AddMasFactura.Nexent <> "") Then
                sw.WriteLine("NEXENT" & Chr(9) & AddMasFactura.Nexent)
            End If
            If (AddMasFactura.Ninent <> "") Then
                sw.WriteLine("NINENT" & Chr(9) & AddMasFactura.Ninent)
            End If
            If (AddMasFactura.Colent <> "") Then
                sw.WriteLine("COLENT" & Chr(9) & AddMasFactura.Colent)
            End If
            If (AddMasFactura.Locent <> "") Then
                sw.WriteLine("LOCENT" & Chr(9) & AddMasFactura.Locent)
            End If
            If (AddMasFactura.Refent <> "") Then
                sw.WriteLine("REFENT" & Chr(9) & AddMasFactura.Refent)
            End If
            If (AddMasFactura.Munent <> "") Then
                sw.WriteLine("MUNENT" & Chr(9) & AddMasFactura.Munent)
            End If
            If (AddMasFactura.Estent <> "") Then
                sw.WriteLine("ESTENT" & Chr(9) & AddMasFactura.Estent)
            End If
            If (AddMasFactura.Paient <> "") Then
                sw.WriteLine("PAIENT" & Chr(9) & AddMasFactura.Paient)
            End If
            If (AddMasFactura.Codent <> "") Then
                sw.WriteLine("CODENT" & Chr(9) & AddMasFactura.Codent)
            End If
            If (AddMasFactura.Eanent <> "") Then
                sw.WriteLine("EANENT" & Chr(9) & AddMasFactura.Eanent)
            End If
            If (AddMasFactura.Numtie <> "") Then
                sw.WriteLine("NUMTIE" & Chr(9) & AddMasFactura.Numtie)
            End If
            If (AddMasFactura.Bodent <> "") Then
                sw.WriteLine("BODENT" & Chr(9) & AddMasFactura.Bodent)
            End If

            ''TOTALES
            If (AddMasFactura.Totlpf <> "") Then
                sw.WriteLine("TOTLPF" & Chr(9) & AddMasFactura.Totlpf)
            End If
            If (AddMasFactura.Subtbr <> "") Then
                sw.WriteLine("SUBTBR" & Chr(9) & AddMasFactura.Subtbr)
            End If
            If (AddMasFactura.Mondes <> "") Then
                sw.WriteLine("MONDES" & Chr(9) & AddMasFactura.Mondes)
            End If
            If (AddMasFactura.Subto2 <> "") Then
                sw.WriteLine("SUBTO2" & Chr(9) & AddMasFactura.Subto2)
            End If
            If (AddMasFactura.Coddes <> "") Then
                sw.WriteLine("CODDES" & Chr(9) & AddMasFactura.Coddes)
            End If
            If (AddMasFactura.Mondet <> "") Then
                sw.WriteLine("MONDET" & Chr(9) & AddMasFactura.Mondet)
            End If
            If (AddMasFactura.Prcdsg <> "") Then
                sw.WriteLine("PRCDSG" & Chr(9) & AddMasFactura.Prcdsg)
            End If
            If (AddMasFactura.Prcdsg_r <> "") Then
                sw.WriteLine("PRCDSG_R" & Chr(9) & AddMasFactura.Prcdsg_r)
            End If
            If (AddMasFactura.Subtsi <> "") Then
                sw.WriteLine("SUBTSI" & Chr(9) & AddMasFactura.Subtsi)
            End If
            If (AddMasFactura.Subtai <> "") Then
                sw.WriteLine("SUBTAI" & Chr(9) & AddMasFactura.Subtai)
            End If
            If (AddMasFactura.Subtot <> "") Then
                sw.WriteLine("SUBTOT" & Chr(9) & AddMasFactura.Subtot)
            End If
            If (AddMasFactura.Totiva <> "") Then
                sw.WriteLine("TOTIVA" & Chr(9) & AddMasFactura.Totiva)
            End If
            If (AddMasFactura.Ivatra <> "") Then
                sw.WriteLine("IVATRA" & Chr(9) & AddMasFactura.Ivatra)
            End If
            If (AddMasFactura.Tatiep <> "") Then
                sw.WriteLine("TATIEP" & Chr(9) & AddMasFactura.Tatiep)
            End If
            If (AddMasFactura.Ieptra <> "") Then
                sw.WriteLine("IEPTRA" & Chr(9) & AddMasFactura.Ieptra)
            End If
            If (AddMasFactura.Ivaret <> "") Then
                sw.WriteLine("IVARET" & Chr(9) & AddMasFactura.Ivaret)
            End If
            If (AddMasFactura.Prc_ivaret <> "") Then
                sw.WriteLine("PRC_IVARET" & Chr(9) & AddMasFactura.Prc_ivaret)
            End If
            If (AddMasFactura.Isrret <> "") Then
                sw.WriteLine("ISRRET" & Chr(9) & AddMasFactura.Isrret)
            End If
            If (AddMasFactura.Prc_isrret <> "") Then
                sw.WriteLine("PRC_ISRRET" & Chr(9) & AddMasFactura.Prc_isrret)
            End If
            If (AddMasFactura.Totpag <> "") Then
                sw.WriteLine("TOTPAG" & Chr(9) & AddMasFactura.Totpag)
            End If
            If (AddMasFactura.Prdesg_1 <> "") Then
                sw.WriteLine("PRDESG_1" & Chr(9) & AddMasFactura.Prdesg_1)
            End If
            If (AddMasFactura.Mondeg_1 <> "") Then
                sw.WriteLine("MONDEG_1" & Chr(9) & AddMasFactura.Mondeg_1)
            End If
            If (AddMasFactura.Subto3 <> "") Then
                sw.WriteLine("SUBTO3" & Chr(9) & AddMasFactura.Subto3)
            End If
            If (AddMasFactura.Prdesg_2 <> "") Then
                sw.WriteLine("PRDESG_2" & Chr(9) & AddMasFactura.Prdesg_2)
            End If
            If (AddMasFactura.Mondeg_2 <> "") Then
                sw.WriteLine("MONDEG_2" & Chr(9) & AddMasFactura.Mondeg_2)
            End If
            If (AddMasFactura.Subto4 <> "") Then
                sw.WriteLine("SUBTO4" & Chr(9) & AddMasFactura.Subto4)
            End If
            If (AddMasFactura.Prdesg_3 <> "") Then
                sw.WriteLine("PRDESG_3" & Chr(9) & AddMasFactura.Prdesg_3)
            End If
            If (AddMasFactura.Mondeg_3 <> "") Then
                sw.WriteLine("MONDEG_3" & Chr(9) & AddMasFactura.Mondeg_3)
            End If
            If (AddMasFactura.Subtot1 <> "") Then
                sw.WriteLine("SUBTOT" & Chr(9) & AddMasFactura.Subtot1)
            End If
            If (AddMasFactura.Prdesg <> "") Then
                sw.WriteLine("PRDESG" & Chr(9) & AddMasFactura.Prdesg)
            End If
            If (AddMasFactura.Mondeg <> "") Then
                sw.WriteLine("MONDEG" & Chr(9) & AddMasFactura.Mondeg)
            End If
            If (AddMasFactura.Totcan <> "") Then
                sw.WriteLine("TOTCAN" & Chr(9) & AddMasFactura.Totcan)
            End If

            ''CONCEPTOS
            For Each dr As MasFactur.AddMasFactura.Detalle In AddMasFactura.Conceptos
                If (dr.Cantid <> "") Then
                    sw.WriteLine("CANTID" & Chr(9) & dr.Cantid)
                End If
                If (dr.Cantip <> "") Then
                    sw.WriteLine("CANTIP" & Chr(9) & dr.Cantip)
                End If
                If (dr.Canpaq <> "") Then
                    sw.WriteLine("CANPAQ" & Chr(9) & dr.Canpaq)
                End If
                If (dr.Canemp <> "") Then
                    sw.WriteLine("CANEMP" & Chr(9) & dr.Canemp)
                End If
                If (dr.Unidad <> "") Then
                    sw.WriteLine("UNIDAD" & Chr(9) & dr.Unidad)
                End If
                If (dr.Cvesku <> "") Then
                    sw.WriteLine("CVESKU" & Chr(9) & dr.Cvesku)
                End If
                If (dr.Codupc <> "") Then
                    sw.WriteLine("CODUPC" & Chr(9) & dr.Codupc)
                End If
                If (dr.Piepem <> "") Then
                    sw.WriteLine("PIEPEM" & Chr(9) & dr.Piepem)
                End If
                If (dr.Coddun <> "") Then
                    sw.WriteLine("CODDUN" & Chr(9) & dr.Coddun)
                End If
                If (dr.Estilv <> "") Then
                    sw.WriteLine("ESTILV" & Chr(9) & dr.Estilv)
                End If
                If (dr.Colorv <> "") Then
                    sw.WriteLine("COLORV" & Chr(9) & dr.Colorv)
                End If
                If (dr.Tallav <> "") Then
                    sw.WriteLine("TALLAV" & Chr(9) & dr.Tallav)
                End If
                If (dr.Descri <> "") Then
                    sw.WriteLine("DESCRI" & Chr(9) & dr.Descri)
                End If
                If (dr.Pbrude <> "") Then
                    sw.WriteLine("PBRUDE" & Chr(9) & dr.Pbrude)
                End If
                If (dr.Impbru <> "") Then
                    sw.WriteLine("IMPBRU" & Chr(9) & dr.Impbru)
                End If
                If (dr.Tdecon <> "") Then
                    sw.WriteLine("TDECON" & Chr(9) & dr.Tdecon)
                End If
                If (dr.Mdecon <> "") Then
                    sw.WriteLine("MDECON" & Chr(9) & dr.Mdecon)
                End If
                If (dr.Cdecon <> "") Then
                    sw.WriteLine("CDECON" & Chr(9) & dr.Cdecon)
                End If
                If (dr.Valuni <> "") Then
                    sw.WriteLine("VALUNI" & Chr(9) & dr.Valuni)
                End If
                If (dr.Import <> "") Then
                    sw.WriteLine("IMPORT" & Chr(9) & dr.Import)
                End If
                If (dr.Tdecon0 <> "") Then
                    sw.WriteLine("TDECON0" & Chr(9) & dr.Tdecon0)
                End If
                If (dr.Mdecon0 <> "") Then
                    sw.WriteLine("MDECON0" & Chr(9) & dr.Mdecon0)
                End If
                If (dr.Tdecon1 <> "") Then
                    sw.WriteLine("TDECON1" & Chr(9) & dr.Tdecon1)
                End If
                If (dr.Mdecon1 <> "") Then
                    sw.WriteLine("MDECON1" & Chr(9) & dr.Mdecon1)
                End If
                If (dr.Tdecon2 <> "") Then
                    sw.WriteLine("TDECON2" & Chr(9) & dr.Tdecon2)
                End If
                If (dr.Mdecon2 <> "") Then
                    sw.WriteLine("MDECON2" & Chr(9) & dr.Mdecon2)
                End If
                If (dr.Tdecon3 <> "") Then
                    sw.WriteLine("TDECON3" & Chr(9) & dr.Tdecon3)
                End If
                If (dr.Mdecon3 <> "") Then
                    sw.WriteLine("MDECON3" & Chr(9) & dr.Mdecon3)
                End If
                If (dr.Tasipe <> "") Then
                    sw.WriteLine("TASIPE" & Chr(9) & dr.Tasipe)
                End If
                If (dr.Monipe <> "") Then
                    sw.WriteLine("MONIPE" & Chr(9) & dr.Monipe)
                End If
                If (dr.Tasipe <> "") Then
                    sw.WriteLine("TASIEP" & Chr(9) & dr.Tasiep)
                End If
                If (dr.Moniep <> "") Then
                    sw.WriteLine("MONIEP" & Chr(9) & dr.Moniep)
                End If
                If (dr.Ivaret_p <> "") Then
                    sw.WriteLine("IVARET_P" & Chr(9) & dr.Ivaret_p)
                End If
                If (dr.Ivaret_d <> "") Then
                    sw.WriteLine("IVARET_D" & Chr(9) & dr.Ivaret_d)
                End If
                If (dr.Isrret_p <> "") Then
                    sw.WriteLine("ISRRET_P" & Chr(9) & dr.Isrret_p)
                End If
                If (dr.Isrret_d <> "") Then
                    sw.WriteLine("ISRRET_D" & Chr(9) & dr.Isrret_d)
                End If
                If (dr.Numadu <> "") Then
                    sw.WriteLine("NUMADU" & Chr(9) & dr.Numadu)
                End If
                If (dr.Fecadu <> "" And _
                    dr.Numadu <> "") Then
                    sw.WriteLine("FECADU" & Chr(9) & Format(Convert.ToDateTime(dr.Fecadu), "yyyy-MM-dd"))
                End If
                If (dr.Aduana <> "") Then
                    sw.WriteLine("ADUANA" & Chr(9) & dr.Aduana)
                End If
                If (dr.Eanadu <> "") Then
                    sw.WriteLine("EANADU" & Chr(9) & dr.Eanadu)
                End If
                If (dr.Cuepre <> "") Then
                    sw.WriteLine("CUEPRE" & Chr(9) & dr.Cuepre)
                End If
                If (dr.Notasp1 <> "") Then
                    sw.WriteLine("NOTASP1" & Chr(9) & dr.Notasp1)
                End If
                If (dr.Notasp2 <> "") Then
                    sw.WriteLine("NOTASP2" & Chr(9) & dr.Notasp2)
                End If
                If (dr.Material <> "") Then
                    sw.WriteLine("MATERIAL" & Chr(9) & dr.Material)
                End If
                If (dr.Relleno <> "") Then
                    sw.WriteLine("RELLENO" & Chr(9) & dr.Relleno)
                End If
                If (dr.Kilataje <> "") Then
                    sw.WriteLine("KILATAJE" & Chr(9) & dr.Kilataje)
                End If
                If (dr.Peso <> "") Then
                    sw.WriteLine("PESO" & Chr(9) & dr.Peso)
                End If
                If (dr.Numlin <> "") Then
                    sw.WriteLine("NUMLIN" & Chr(9) & dr.Numlin)
                End If
            Next
            sw.Close()

        Catch ex As Exception
            Throw New Exception("Ocurrió un error al generar la Addenda: " & ex.Message)
        End Try
    End Sub

#Region "Metodos_Auxiliares"
    Public Function valida_RFC(ByVal sRfc As String) As Boolean
        Dim re As Regex = New Regex( _
                            "^[a-zA-Z]{3,4}(\d{6})((\D|\d){3})?$", _
                            RegexOptions.IgnoreCase)
        Dim m As Match = re.Match(sRfc)
        If m.Captures.Count = 0 Then
            Return False
        Else
            Return True
        End If
    End Function
    Public Function valida_Correo(ByVal sCorreo As String) As Boolean
        Dim re As Regex = New Regex( _
                            "^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@" & _
                            "[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\." & _
                            "[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$", _
                            RegexOptions.IgnoreCase)
        Dim m As Match = re.Match(sCorreo)
        If m.Captures.Count = 0 Then
            Return False
        Else
            Return True
        End If
    End Function
    Private Sub IntegraNodo(ByRef Nodo As XmlNode, ByRef DocXml As XmlDocument, ByVal Val As String, _
                            ByVal At As String)
        Dim xmlAtt As XmlAttribute
        Dim Valor As XmlText
        Try
            Dim NodGenerico As XmlNode = DocXml.CreateElement("mf", "NEMONICO", "http://www.masteredi.com.mx/masfactura2")
            xmlAtt = DocXml.CreateAttribute("nombre")
            xmlAtt.Value = At
            NodGenerico.Attributes.Append(xmlAtt)

            Valor = DocXml.CreateTextNode(Val)
            NodGenerico.AppendChild(Valor)
            Nodo.AppendChild(NodGenerico)
        Catch ex As Exception

        End Try
    End Sub
#End Region
End Class
